/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.k.motan.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * BasicReferer Config
 *
 * @author 	alanwei
 * @since 	2016-09-13
 */
@Configuration
@ConfigurationProperties(prefix = "motan.basicreferer")
public class BasicRefererConfigProperties {

    /** 服务引用 BeanId */
    private String id;

    /** 使用的协议 default motan */
    private String protocol;

    /** 服务分组 defalut default_rpc */
    private String group;

    /** 模块信息 */
    private String module;

    /** 应用信息 */
    private String application;

    /** 注册中心的id 列表，多个用“,”分隔，如果为空，则使用所有的配置中心 */
    private String registry;

    /** 检查服务提供者是否存在 */
    private String check;

    /** 设为true，将向logger 中输出访问日志 */
    private Boolean accessLog;

    /** 重试次数 defalut 0 */
    private Integer retries;

    /** 抛出异常 default true */
    private Boolean throwException;

    /** 版本 default 1.0 */
    private String version;

    /** 是否共享channel default false */
    private Boolean shareChannel;

    /** 请求超时时间(毫秒) default 200 */
    private Integer requestTimeout;

    /** 过滤器配置 */
    private String filter;

    /** 扩展配置 */
    private String extConfigId;

    /** 最大请求数，0为不做并发限制 default 0 */
    private Integer actives;

    /** 方法是否异步 default false */
    private Boolean async;

    /** 协议编码 */
    private String codec;

    /** 是否开启gzip压缩.只有compressMotan的codec才能支持 */
    private Boolean usegz;

    /** 代理类型 */
    private String proxy;

    /**
     * 开启gzip压缩的阈值.usegz开关开启，且传输数据大于此阈值时，才会进行gzip压缩。
     * 只有compressMotan的codec才能支持
     */
    private Integer mingzSize;

    /**
     * 设为true，表示使用缺省Mock类名
     * 即：接口名+Mock 后缀，服务接口调用失败Mock实现类
     */
    private String mock;

    /** 以下4个文档未描述 */
    private String errorRate;
    private String localServiceAddress;
    private String mean;
    private Boolean defaultConfig;

    /**
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * @return the protocol
     */
    public String getProtocol() {
        return protocol;
    }

    /**
     * @param protocol the protocol to set
     */
    public void setProtocol(String protocol) {
        this.protocol = protocol;
    }

    /**
     * @return the group
     */
    public String getGroup() {
        return group;
    }

    /**
     * @param group the group to set
     */
    public void setGroup(String group) {
        this.group = group;
    }

    /**
     * @return the module
     */
    public String getModule() {
        return module;
    }

    /**
     * @param module the module to set
     */
    public void setModule(String module) {
        this.module = module;
    }

    /**
     * @return the application
     */
    public String getApplication() {
        return application;
    }

    /**
     * @param application the application to set
     */
    public void setApplication(String application) {
        this.application = application;
    }

    /**
     * @return the registry
     */
    public String getRegistry() {
        return registry;
    }

    /**
     * @param registry the registry to set
     */
    public void setRegistry(String registry) {
        this.registry = registry;
    }

    /**
     * @return the check
     */
    public String getCheck() {
        return check;
    }

    /**
     * @param check the check to set
     */
    public void setCheck(String check) {
        this.check = check;
    }

    /**
     * @return the accessLog
     */
    public Boolean getAccessLog() {
        return accessLog;
    }

    /**
     * @param accessLog the accessLog to set
     */
    public void setAccessLog(Boolean accessLog) {
        this.accessLog = accessLog;
    }

    /**
     * @return the retries
     */
    public Integer getRetries() {
        return retries;
    }

    /**
     * @param retries the retries to set
     */
    public void setRetries(Integer retries) {
        this.retries = retries;
    }

    /**
     * @return the throwException
     */
    public Boolean getThrowException() {
        return throwException;
    }

    /**
     * @param throwException the throwException to set
     */
    public void setThrowException(Boolean throwException) {
        this.throwException = throwException;
    }

    /**
     * @return the version
     */
    public String getVersion() {
        return version;
    }

    /**
     * @param version the version to set
     */
    public void setVersion(String version) {
        this.version = version;
    }

    /**
     * @return the shareChannel
     */
    public Boolean getShareChannel() {
        return shareChannel;
    }

    /**
     * @param shareChannel the shareChannel to set
     */
    public void setShareChannel(Boolean shareChannel) {
        this.shareChannel = shareChannel;
    }

    /**
     * @return the requestTimeout
     */
    public Integer getRequestTimeout() {
        return requestTimeout;
    }

    /**
     * @param requestTimeout the requestTimeout to set
     */
    public void setRequestTimeout(Integer requestTimeout) {
        this.requestTimeout = requestTimeout;
    }

    /**
     * @return the filter
     */
    public String getFilter() {
        return filter;
    }

    /**
     * @param filter the filter to set
     */
    public void setFilter(String filter) {
        this.filter = filter;
    }

    /**
     * @return the extConfigId
     */
    public String getExtConfigId() {
        return extConfigId;
    }

    /**
     * @param extConfigId the extConfigId to set
     */
    public void setExtConfigId(String extConfigId) {
        this.extConfigId = extConfigId;
    }

    /**
     * @return the actives
     */
    public Integer getActives() {
        return actives;
    }

    /**
     * @param actives the actives to set
     */
    public void setActives(Integer actives) {
        this.actives = actives;
    }

    /**
     * @return the async
     */
    public Boolean getAsync() {
        return async;
    }

    /**
     * @param async the async to set
     */
    public void setAsync(Boolean async) {
        this.async = async;
    }

    /**
     * @return the codec
     */
    public String getCodec() {
        return codec;
    }

    /**
     * @param codec the codec to set
     */
    public void setCodec(String codec) {
        this.codec = codec;
    }

    /**
     * @return the usegz
     */
    public Boolean getUsegz() {
        return usegz;
    }

    /**
     * @param usegz the usegz to set
     */
    public void setUsegz(Boolean usegz) {
        this.usegz = usegz;
    }

    /**
     * @return the proxy
     */
    public String getProxy() {
        return proxy;
    }

    /**
     * @param proxy the proxy to set
     */
    public void setProxy(String proxy) {
        this.proxy = proxy;
    }

    /**
     * @return the mingzSize
     */
    public Integer getMingzSize() {
        return mingzSize;
    }

    /**
     * @param mingzSize the mingzSize to set
     */
    public void setMingzSize(Integer mingzSize) {
        this.mingzSize = mingzSize;
    }

    /**
     * @return the mock
     */
    public String getMock() {
        return mock;
    }

    /**
     * @param mock the mock to set
     */
    public void setMock(String mock) {
        this.mock = mock;
    }

    /**
     * @return the errorRate
     */
    public String getErrorRate() {
        return errorRate;
    }

    /**
     * @param errorRate the errorRate to set
     */
    public void setErrorRate(String errorRate) {
        this.errorRate = errorRate;
    }

    /**
     * @return the localServiceAddress
     */
    public String getLocalServiceAddress() {
        return localServiceAddress;
    }

    /**
     * @param localServiceAddress the localServiceAddress to set
     */
    public void setLocalServiceAddress(String localServiceAddress) {
        this.localServiceAddress = localServiceAddress;
    }

    /**
     * @return the mean
     */
    public String getMean() {
        return mean;
    }

    /**
     * @param mean the mean to set
     */
    public void setMean(String mean) {
        this.mean = mean;
    }

    /**
     * @return the defaultConfig
     */
    public Boolean getDefaultConfig() {
        return defaultConfig;
    }

    /**
     * @param defaultConfig the defaultConfig to set
     */
    public void setDefaultConfig(Boolean defaultConfig) {
        this.defaultConfig = defaultConfig;
    }
}
